/**
 * @brief 类RFC2217兼容有人7s4 ，尾部连接网口头部
 * @version 1.0
 * @date 2018-2-28
 * @author 宋炜
 * @ref USR-LTE-7S4-software-V1.0.5.pdf ， 2.2.3节，类RFC2217
*/
#ifndef __RFC2217_HPP__
#define __RFC2217_HPP__
#include <string>

#include "filterio.h"
class rfc2217 : public filterIO
{
public:
	/**
	 * @brief 协议结构定义
	 */
	struct stCmd{
		int head:24;
		int baud:24;        // 波特率
		/* 串口参数 */
		struct params{          // 串口参数设置
			int char_len:2;     // 数据长度
			int stop:1;         // 停止位
			int parity_en:1;    // 校验位使能
			int parity:2;       // 校验位
			int :2;             // 空
		};
		uint8_t     lrc;        // 和校验
	};
private:
	stCmd          m_params;               // 协议数据结构；可以把数据直接拷贝到结构体内存中
						// 完成结构解析；
	int            m_fd;
public:
	/**
	 * @brief 初始化
	 * @param fd , 串口文件描述符
	 * @param l
	 */
	rfc2217( int fd ,  filterList *l);
	virtual ~rfc2217();

private:
	bool on_forward( size_t len , const char * date , err_code &err , size_t& rlen , char ** rd );
	bool on_backward( size_t len , const char * data , err_code &err , size_t& rlen , char ** rd  );
	/**
	 * @brief 检查数据结构和LRC是否正确。如果正确则执行相关指令
	 */
	bool check();
};

#endif // __RFC2217_HPP__
